//=============================================================================

#ifndef AVECTOR_H
  #define AVECTOR_H

//=============================================================================

#include <math.h>

//=============================================================================

class aVector
{
  public:
    inline const aVector& operator=(const aVector& vec)
    {
      this->x = vec.x;
      this->y = vec.y;
      this->z = vec.z;

      return (*this);
    }
    inline bool operator==(const aVector& vec)
    {
      if (fabs((this->x) - (vec.x)) < 0.0001f)
        if (fabs((this->y) - (vec.y)) < 0.0001f)
          if (fabs((this->z) - (vec.z)) < 0.0001f)
            return 1;
      
      return 0;
    }
    inline bool operator==(const aVector& vec)const
    {
      if (fabs((this->x) - (vec.x)) < 0.0001f)
        if (fabs((this->y) - (vec.y)) < 0.0001f)
          if (fabs((this->z) - (vec.z)) < 0.0001f)
            return 1;
      
      return 0;
    }
    inline bool operator!=(const aVector& vec)
    {
      if (fabs((this->x) - (vec.x)) < 0.0001f)
        if (fabs((this->y) - (vec.y)) < 0.0001f)
          if (fabs((this->z) - (vec.z)) < 0.0001f)
            return 0;

      return 1;
    }
    inline bool operator!=(const aVector& vec)const
    {
      if (fabs((this->x) - (vec.x)) < 0.0001f)
        if (fabs((this->y) - (vec.y)) < 0.0001f)
          if (fabs((this->z) - (vec.z)) < 0.0001f)
            return 0;

      return 1;
    }
    inline const aVector operator+(const aVector& vec)const
    {
      aVector tmpVector((*this));

      tmpVector.x += vec.x;
      tmpVector.y += vec.y;
      tmpVector.z += vec.z;

      return tmpVector;
    }
    inline const aVector operator-(const aVector& vec)const
    {
      aVector tmpVector((*this));

      tmpVector.x -= vec.x;
      tmpVector.y -= vec.y;
      tmpVector.z -= vec.z;

      return tmpVector;
    }
    inline const aVector& operator+=(const aVector& vec)
    {
      this->x += vec.x;
      this->y += vec.y;
      this->z += vec.z;

      return (*this);
    }
    inline const aVector& operator-=(const aVector& vec)
    {
      this->x -= vec.x;
      this->y -= vec.y;
      this->z -= vec.z;

      return (*this);
    }
    inline const aVector operator*(float num)const
    {
      aVector tmpVector((*this));

      tmpVector.x *= num;
      tmpVector.y *= num;
      tmpVector.z *= num;

      return tmpVector;
    }
    inline const aVector operator/(float num)const
    {
      aVector tmpVector((*this));

      tmpVector.x /= num;
      tmpVector.y /= num;
      tmpVector.z /= num;

      return tmpVector;
    }
    inline const aVector& operator*=(float num)
    {
      this->x *= num;
      this->y *= num;
      this->z *= num;

      return (*this);
    }
    inline const aVector& operator/=(float num)
    {
      this->x /= num;
      this->y /= num;
      this->z /= num;

      return (*this);
    }
    inline void avSet(float xx, float yy, float zz) {x = xx; y = yy; z = zz;}
    inline void avNull()                            {x = 0.0f; y = 0.0f; z = 0.0f;}

    aVector();
    aVector(float, float, float);
    aVector(const aVector&);
    ~aVector();

  public:
    float x, y, z;
};

//=============================================================================

#endif

//=============================================================================
